class EventBus {
  constructor() {
    // 存储事件的回调
    this.eventMap = {
    };
  }
  // 触发eventMap中存在的事件的回调，并传参
  $emit(eventName, params) {
    if (this.eventMap[eventName] && typeof this.eventMap[eventName] === 'function') {
      this.eventMap[eventName](params);
    }
  }
  // 注册事件名以及对应得回调到eventMap
  $on(eventName, eventHandler) {
    if (typeof eventName === 'string' && typeof eventHandler === 'function') {
      // 处理注册的事件名重复，in操作符不需要遍历对象，就可以查询一个对象中是否存在某个属性
      if (eventName in this.eventMap) {
        throw new Error(`自定义事件名${eventName}重复`);
      } else {
        this.eventMap[eventName] = eventHandler;
      }
    } else {
      throw new Error('参数不合法');
    }
  }
}

// 所有事件必须先注册后触发事件
// 导出实例
export default new EventBus();

// const eventbus = new EventBus();
// eventbus.$on('a', () => {
//   console.log('执行事件a');
// });
